package cn.edu.lcu.cs.javaweb.web;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import sun.text.normalizer.ICUBinary.Authenticate;

/**
 * 登录Servlet，接收用户提交的用户名及密码，进行登录验证
 * 
 * @author Ling
 *
 */
@WebServlet("/login")
public class LoginServlet extends HttpServlet {

	public LoginServlet() {
		super();
	}

	/**
	 * <p>
	 * 在浏览器地址栏直接输入地址，就是Http get方式访问，本方法就会被调用
	 * </p>
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String username = null;
		String password = null;
		// 尝试获取Cookie，提取用户名及密码
		Cookie[] cookies = request.getCookies();
		if (cookies != null && cookies.length > 0) {
			for (Cookie cookie : cookies) {
				if (cookie.getName().equals("username")) {
					username = cookie.getValue();
				} else if (cookie.getName().equals("password")) {
					password = cookie.getValue();
				}
			}
		}

		if (authenticate(username, password)) {
			// 将当前登录用户信息存储到Session中
			request.getSession().setAttribute("currentUser", username);
			System.out.println("Cookie登录成功");
			response.sendRedirect("index.jsp");
		} else {
			// 转发的时候，浏览器地址栏还是/login，用户感受不到真实的页面到底是哪个
			// 应该避免在地址栏直接访问html或jsp的地址，而是访问servlet地址，由servlet转发给页面
			request.getRequestDispatcher("login.jsp").forward(request, response);
		}
	}

	/**
	 * 根据用户名及密码进行登录认证
	 * 
	 * @param username
	 * @param password
	 * @return
	 */
	private boolean authenticate(String username, String password) {
		// 暂时硬编码
		return "admin".equals(username) && "123".equals(password);
	}

	/**
	 * <p>
	 * 页面表单提交数据，一般用Post方式，比较安全
	 * </p>
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter writer = response.getWriter();

		// 获取用户提交的用户名及密码
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		String rememberme = request.getParameter("rememberme");
//		System.out.println(rememberme); // rememberme = on

		// 对用户提交的用户名及密码进行验证
		// 暂时用硬编码的方式进行验证，后期从数据库里读取数据进行验证
		if (authenticate(username, password)) {
			// 判断是否记住我
			if (rememberme != null) {
				Cookie usernameCookie = new Cookie("username", username);
				usernameCookie.setMaxAge(60 * 60 * 24 * 7); // 记住我，七天有效

				Cookie passwordCookie = new Cookie("password", password);
				passwordCookie.setMaxAge(60 * 60 * 24 * 7); // 记住我，七天有效

				response.addCookie(usernameCookie);
				response.addCookie(passwordCookie);
			}

			// 将当前登录用户信息存储到Session中
			request.getSession().setAttribute("currentUser", username);
			// 验证通过，登录成功，转到首页
			// 请求转发？还是重定向？
			System.out.println("登录成功");
			response.sendRedirect("index.jsp");
//			writer.append("登录成功，2秒钟后转到首页");
//			response.setHeader("refresh", "2;url=" + getServletContext().getContextPath() + "/index.jsp");
		} else {
			// 验证失败，转到登录页面继续登录
			// 请求转发？还是重定向？
			System.out.println("登录失败");
			request.getRequestDispatcher("login.jsp").forward(request, response);
		}

	}

}
